// eht.js - LayUI动态元素管理库核心

// 全局元素存储对象
const elementStore = window.elementStore || {
    // 组件会自行注册自己的存储空间
};

// 动态加载组件库
const ehtLibPath = './lib/ehtlib/';

// 手动列出并加载所有JS组件文件
const componentFiles = [
    'button.js',
    'datetime.js',
    'div.js',
    'pg.js',
    'pic.js',
    'picplay.js',
    'slider.js',
    'table.js',
    'tdiv.js',
    'text.js'
];

componentFiles.forEach(file => {
    const script = document.createElement('script');
    script.src = ehtLibPath + file;
    document.head.appendChild(script);
});

// 确保组件函数在全局可用
if (!window.ehtComponents) {
    window.ehtComponents = {};
}


// 统一ID生成器
function generateId(prefix = 'elem') {
    return `${prefix}_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
}

let keyReleased = false;//防止键盘放开后莫名其妙触发了stat=1

/**
 * 统一事件处理函数
 * @param {string} id - 元素ID
 * @param {number} stat - 事件类型 [0=鼠标移动,1=左键点击,2=右键点击,3=键盘按下,4=键盘放开,5=鼠标进入,6=鼠标离开,7=轮播图片切换]
 * @param {string} tag - 元素标记
 * @param {number} x - 鼠标X坐标
 * @param {number} y - 鼠标Y坐标
 * @param {string} key - 按键代码
 * @param {function} callback - 自定义回调函数
 */

//typa=组件类型字符串,id=组件id,stat=事件类型,title=组件标题,tag=组件标签,x=鼠标x坐标,y=鼠标y坐标,key=键盘按键值
        //stat=1鼠标左键点击,stat=2鼠标右键点击,stat=3键盘按键按下,stat=4键盘按键松开,stat=5鼠标进入,stat=6鼠标移出,stat=7鼠标双击

        
function handleEvent(typa, id, stat, title, tag, x, y, key, r, c, callback, divid) {
    
    // 确保所有参数都有默认值
    typa = typa || '';
    id = id || '';
    stat = stat || 0;
    tag = tag || '';
    x = x || -1;
    y = y || -1;
    key = key || '';
    if(typa=='table'||typa=='slider'||typa=='picplay'||typa=='tablebutton'){
        r = r || 0;
        c = c || 0;
    }else{
    r = r || -1;
    c = c || -1;
    }
    
    // 按键事件处理：3=按下，4=释放
    if (stat === 3 || stat === 4) {
        // 如果父div隐藏，则不处理事件
        if (divid) {
            const parentDiv = document.getElementById(divid);
            if (parentDiv && parentDiv.style.display === 'none') return;
        }
        
        if (stat === 4) {
            keyReleased = true;
        }
        
        // 确保title和tag参数正确传递
        const button = document.getElementById(id);
        const btnTitle = title;
        const btnTag = tag;
        
        if (callback && typeof callback === 'function') {
            const stopDefault = callback(typa, id, stat, btnTitle, btnTag, x, y, key, r, c);
            if (stopDefault === true) return;
        }
        
        if (typeof eht_callback === 'function') {
            eht_callback(typa, id, stat, btnTitle, btnTag, x, y, key, r, c);
        }
        return;
    }
    
    if (keyReleased == true) {
        keyReleased = false;
        return;
    }
    
    // 非按键事件处理
    const button = document.getElementById(id);
    const btnTitle = title;
    const btnTag = tag;
    
    if (callback && typeof callback === 'function') {
        const stopDefault = callback(typa, id, stat, btnTitle, btnTag, x, y, key, r, c);
        if (stopDefault === true) return;
    }
    
    if (typeof eht_callback === 'function') {
        eht_callback(typa, id, stat, btnTitle, btnTag, x, y, key, r, c);
    }
}